Update and export maps
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
type(DateTime), | intent(in) | :: | time | |||
integer(kind=short), | intent(in) | :: | dt |
time step (s) |
||
type(grid_real), | intent(in) | :: | temp |
air temperarure (°C) |
||
type(grid_real), | intent(in) | :: | precipitation |
precipitation rate (m/s) |
||
type(grid_real), | intent(in) | :: | rh |
air relative humidity (0-100) |
||
type(grid_real), | intent(in) | :: | radiation |
solar radiation (w/m2) |
||
type(grid_real), | intent(in) | :: | netradiation |
net radiation (w/m2) |
||
type(grid_real), | intent(in) | :: | windspeed |
wind speed (m/s) |
||
type(grid_real), | intent(in) | :: | swe |
snow water equivalent (m) |
||
type(grid_real), | intent(in) | :: | sm |
soil moisture (-) |
||
type(grid_real), | intent(in) | :: | runoff |
runoff (m/s) |
||
type(grid_real), | intent(in) | :: | infiltration |
infiltration (m/s) |
||
type(grid_real), | intent(in) | :: | percolation |
deep percolation (m/s) |
||
type(grid_real), | intent(in) | :: | et |
actual evapotranspiration (m/s) |
||
type(grid_real), | intent(in) | :: | pet |
potential evapotranspiration (m/s) |
Type | Visibility | Attributes | Name | Initial | |||
---|---|---|---|---|---|---|---|
integer(kind=short), | public | :: | i | ||||
integer(kind=short), | public | :: | j | ||||
character(len=300), | public | :: | string | ||||
character(len=16), | public | :: | string16 |
SUBROUTINE ExportMaps & ! (time, dt, temp, precipitation, rh, radiation, netradiation, windspeed, & swe, sm, runoff, infiltration, percolation, et, pet) IMPLICIT NONE !arguments with intent in: TYPE (DateTime), INTENT(IN) :: time INTEGER (KIND = short), INTENT(IN) :: dt !! time step (s) TYPE (grid_real), INTENT(IN) :: temp !!air temperarure (°C) TYPE (grid_real), INTENT(IN) :: precipitation !!precipitation rate (m/s) TYPE (grid_real), INTENT(IN) :: rh !!air relative humidity (0-100) TYPE (grid_real), INTENT(IN) :: radiation !!solar radiation (w/m2) TYPE (grid_real), INTENT(IN) :: netradiation !!net radiation (w/m2) TYPE (grid_real), INTENT(IN) :: windspeed !!wind speed (m/s) TYPE (grid_real), INTENT(IN) :: swe !!snow water equivalent (m) TYPE (grid_real), INTENT(IN) :: sm !!soil moisture (-) TYPE (grid_real), INTENT(IN) :: runoff !!runoff (m/s) TYPE (grid_real), INTENT(IN) :: infiltration !!infiltration (m/s) TYPE (grid_real), INTENT(IN) :: percolation !!deep percolation (m/s) TYPE (grid_real), INTENT(IN) :: et !!actual evapotranspiration (m/s) TYPE (grid_real), INTENT(IN) :: pet !!potential evapotranspiration (m/s) !local declarations: INTEGER (KIND = short) :: i, j CHARACTER (LEN = 300) :: string CHARACTER (LEN = 16) :: string16 !--------------------------end of declarations--------------------------------- !update precipitation IF ( varOut (1) ) THEN IF ( useTemplate ) THEN !need to convert maps CALL GridConvert (precipitation, gridTemp) CALL GridResample (gridTemp, gridTemp2) DO j = 1, rasterTemplate % jdim DO i = 1, rasterTemplate % idim IF ( rasterTemplate % mat (i,j) /= rasterTemplate % nodata .AND. & gridTemp2 % mat (i,j) /= gridTemp2 % nodata ) THEN rasterPrecipitation % mat (i,j) = rasterPrecipitation % mat (i,j) + & gridTemp2 % mat (i,j) * dt * 1000. ELSE rasterPrecipitation % mat (i,j) = rasterPrecipitation % nodata END IF END DO END DO ELSE DO j = 1, rasterTemplate % jdim DO i = 1, rasterTemplate % idim IF ( rasterTemplate % mat (i,j) /= rasterTemplate % nodata) THEN rasterPrecipitation % mat (i,j) = rasterPrecipitation % mat (i,j) + & precipitation % mat (i,j) * dt * 1000. END IF END DO END DO END IF END IF !update temperature IF ( varOut (2) ) THEN IF ( useTemplate ) THEN !need to convert maps CALL GridConvert (temp, gridTemp) CALL GridResample (gridTemp, gridTemp2) DO j = 1, rasterTemplate % jdim DO i = 1, rasterTemplate % idim IF ( rasterTemplate % mat (i,j) /= rasterTemplate % nodata .AND. & gridTemp2 % mat (i,j) /= gridTemp2 % nodata ) THEN rasterTemperature % mat (i,j) = & ( countSteps * rasterTemperature % mat (i,j) + & gridTemp2 % mat (i,j) ) / ( countSteps + 1) ELSE rasterTemperature % mat (i,j) = rasterTemperature % nodata END IF END DO END DO ELSE DO j = 1, rasterTemplate % jdim DO i = 1, rasterTemplate % idim IF ( rasterTemplate % mat (i,j) /= rasterTemplate % nodata) THEN rasterTemperature % mat (i,j) = & ( countSteps * rasterTemperature % mat (i,j) + & temp % mat (i,j) ) / ( countSteps + 1) END IF END DO END DO END IF END IF !update relative humidity IF ( varOut (3) ) THEN IF ( useTemplate ) THEN !need to convert maps CALL GridConvert (rh, gridTemp) CALL GridResample (gridTemp, gridTemp2) DO j = 1, rasterTemplate % jdim DO i = 1, rasterTemplate % idim IF ( rasterTemplate % mat (i,j) /= rasterTemplate % nodata .AND. & gridTemp2 % mat (i,j) /= gridTemp2 % nodata ) THEN rasterRH % mat (i,j) = & ( countSteps * rasterRH % mat (i,j) + & gridTemp2 % mat (i,j) ) / ( countSteps + 1) ELSE rasterRH % mat (i,j) = rasterRH % nodata END IF END DO END DO ELSE DO j = 1, rasterTemplate % jdim DO i = 1, rasterTemplate % idim IF ( rasterTemplate % mat (i,j) /= rasterTemplate % nodata) THEN rasterRH % mat (i,j) = & ( countSteps * rasterRH % mat (i,j) + & rh % mat (i,j) ) / ( countSteps + 1) END IF END DO END DO END IF END IF !update radiation IF ( varOut (4) ) THEN IF ( useTemplate ) THEN !need to convert maps CALL GridConvert (radiation, gridTemp) CALL GridResample (gridTemp, gridTemp2) DO j = 1, rasterTemplate % jdim DO i = 1, rasterTemplate % idim IF ( rasterTemplate % mat (i,j) /= rasterTemplate % nodata .AND. & gridTemp2 % mat (i,j) /= gridTemp2 % nodata ) THEN rasterRad % mat (i,j) = & ( countSteps * rasterRad % mat (i,j) + & gridTemp2 % mat (i,j) ) / ( countSteps + 1) ELSE rasterRad % mat (i,j) = rasterRad % nodata END IF END DO END DO ELSE DO j = 1, rasterTemplate % jdim DO i = 1, rasterTemplate % idim IF ( rasterTemplate % mat (i,j) /= rasterTemplate % nodata) THEN rasterRad % mat (i,j) = & ( countSteps * rasterRad % mat (i,j) + & radiation % mat (i,j) ) / ( countSteps + 1) END IF END DO END DO END IF END IF !update net radiation IF ( varOut (5) ) THEN IF ( useTemplate ) THEN !need to convert maps CALL GridConvert (netradiation, gridTemp) CALL GridResample (gridTemp, gridTemp2) DO j = 1, rasterTemplate % jdim DO i = 1, rasterTemplate % idim IF ( rasterTemplate % mat (i,j) /= rasterTemplate % nodata .AND. & gridTemp2 % mat (i,j) /= gridTemp2 % nodata ) THEN rasterNetRad % mat (i,j) = & ( countSteps * rasterNetRad % mat (i,j) + & gridTemp2 % mat (i,j) ) / ( countSteps + 1) ELSE rasterNetRad % mat (i,j) = rasterNetRad % nodata END IF END DO END DO ELSE DO j = 1, rasterTemplate % jdim DO i = 1, rasterTemplate % idim IF ( rasterTemplate % mat (i,j) /= rasterTemplate % nodata) THEN rasterNetRad % mat (i,j) = & ( countSteps * rasterNetRad % mat (i,j) + & netradiation % mat (i,j) ) / ( countSteps + 1) END IF END DO END DO END IF END IF !update wind speed IF ( varOut (6) ) THEN IF ( useTemplate ) THEN !need to convert maps CALL GridConvert (windspeed, gridTemp) CALL GridResample (gridTemp, gridTemp2) DO j = 1, rasterTemplate % jdim DO i = 1, rasterTemplate % idim IF ( rasterTemplate % mat (i,j) /= rasterTemplate % nodata .AND. & gridTemp2 % mat (i,j) /= gridTemp2 % nodata ) THEN rasterWS % mat (i,j) = & ( countSteps * rasterWS % mat (i,j) + & gridTemp2 % mat (i,j) ) / ( countSteps + 1) ELSE rasterWS % mat (i,j) = rasterWS % nodata END IF END DO END DO ELSE DO j = 1, rasterTemplate % jdim DO i = 1, rasterTemplate % idim IF ( rasterTemplate % mat (i,j) /= rasterTemplate % nodata) THEN rasterWS % mat (i,j) = & ( countSteps * rasterWS % mat (i,j) + & windspeed % mat (i,j) ) / ( countSteps + 1) END IF END DO END DO END IF END IF !update snow water equivalent IF ( varOut (7) ) THEN IF ( useTemplate ) THEN !need to convert maps CALL GridConvert (swe, gridTemp) CALL GridResample (gridTemp, gridTemp2) DO j = 1, rasterTemplate % jdim DO i = 1, rasterTemplate % idim IF ( rasterTemplate % mat (i,j) /= rasterTemplate % nodata .AND. & gridTemp2 % mat (i,j) /= gridTemp2 % nodata ) THEN rasterSWE % mat (i,j) = & ( countSteps * rasterSWE % mat (i,j) + & gridTemp2 % mat (i,j) * 1000. ) / ( countSteps + 1) ELSE rasterSWE % mat (i,j) = rasterSWE % nodata END IF END DO END DO ELSE DO j = 1, rasterTemplate % jdim DO i = 1, rasterTemplate % idim IF ( rasterTemplate % mat (i,j) /= rasterTemplate % nodata) THEN rasterSWE % mat (i,j) = & ( countSteps * rasterSWE % mat (i,j) + & swe % mat (i,j) * 1000. ) / ( countSteps + 1) END IF END DO END DO END IF END IF !update soil moisture IF ( varOut (8) ) THEN IF ( useTemplate ) THEN !need to convert maps CALL GridConvert (sm, gridTemp) CALL GridResample (gridTemp, gridTemp2) DO j = 1, rasterTemplate % jdim DO i = 1, rasterTemplate % idim IF ( rasterTemplate % mat (i,j) /= rasterTemplate % nodata .AND. & gridTemp2 % mat (i,j) /= gridTemp2 % nodata ) THEN rasterSM % mat (i,j) = & ( countSteps * rasterSM % mat (i,j) + & gridTemp2 % mat (i,j) ) / ( countSteps + 1) ELSE rasterSM % mat (i,j) = rasterSM % nodata END IF END DO END DO ELSE DO j = 1, rasterTemplate % jdim DO i = 1, rasterTemplate % idim IF ( rasterTemplate % mat (i,j) /= rasterTemplate % nodata) THEN rasterSM % mat (i,j) = & ( countSteps * rasterSM % mat (i,j) + & sm % mat (i,j) ) / ( countSteps + 1) END IF END DO END DO END IF END IF !update runoff IF ( varOut (9) ) THEN IF ( useTemplate ) THEN !need to convert maps CALL GridConvert (runoff, gridTemp) CALL GridResample (gridTemp, gridTemp2) DO j = 1, rasterTemplate % jdim DO i = 1, rasterTemplate % idim IF ( rasterTemplate % mat (i,j) /= rasterTemplate % nodata .AND. & gridTemp2 % mat (i,j) /= gridTemp2 % nodata ) THEN rasterRunoff % mat (i,j) = rasterRunoff % mat (i,j) + & gridTemp2 % mat (i,j) * dt * 1000. ELSE rasterRunoff % mat (i,j) = rasterRunoff % nodata END IF END DO END DO ELSE DO j = 1, rasterTemplate % jdim DO i = 1, rasterTemplate % idim IF ( rasterTemplate % mat (i,j) /= rasterTemplate % nodata) THEN rasterRunoff % mat (i,j) = rasterRunoff % mat (i,j) + & runoff % mat (i,j) * dt * 1000. END IF END DO END DO END IF END IF !update infiltration IF ( varOut (10) ) THEN IF ( useTemplate ) THEN !need to convert maps CALL GridConvert (infiltration, gridTemp) CALL GridResample (gridTemp, gridTemp2) DO j = 1, rasterTemplate % jdim DO i = 1, rasterTemplate % idim IF ( rasterTemplate % mat (i,j) /= rasterTemplate % nodata .AND. & gridTemp2 % mat (i,j) /= gridTemp2 % nodata ) THEN rasterInfiltration % mat (i,j) = rasterInfiltration % mat (i,j) + & gridTemp2 % mat (i,j) * dt * 1000. ELSE rasterInfiltration % mat (i,j) = rasterInfiltration % nodata END IF END DO END DO ELSE DO j = 1, rasterTemplate % jdim DO i = 1, rasterTemplate % idim IF ( rasterTemplate % mat (i,j) /= rasterTemplate % nodata) THEN rasterInfiltration % mat (i,j) = rasterInfiltration % mat (i,j) + & infiltration % mat (i,j) * dt * 1000. END IF END DO END DO END IF END IF !update percolation IF ( varOut (11) ) THEN IF ( useTemplate ) THEN !need to convert maps CALL GridConvert (percolation, gridTemp) CALL GridResample (gridTemp, gridTemp2) DO j = 1, rasterTemplate % jdim DO i = 1, rasterTemplate % idim IF ( rasterTemplate % mat (i,j) /= rasterTemplate % nodata .AND. & gridTemp2 % mat (i,j) /= gridTemp2 % nodata ) THEN rasterPercolation % mat (i,j) = rasterPercolation % mat (i,j) + & gridTemp2 % mat (i,j) * dt * 1000. ELSE rasterPercolation % mat (i,j) = rasterPercolation % nodata END IF END DO END DO ELSE DO j = 1, rasterTemplate % jdim DO i = 1, rasterTemplate % idim IF ( rasterTemplate % mat (i,j) /= rasterTemplate % nodata) THEN rasterPercolation % mat (i,j) = rasterPercolation % mat (i,j) + & percolation % mat (i,j) * dt * 1000. END IF END DO END DO END IF END IF !update actual evapotranspiration IF ( varOut (12) ) THEN IF ( useTemplate ) THEN !need to convert maps CALL GridConvert (et, gridTemp) CALL GridResample (gridTemp, gridTemp2) DO j = 1, rasterTemplate % jdim DO i = 1, rasterTemplate % idim IF ( rasterTemplate % mat (i,j) /= rasterTemplate % nodata .AND. & gridTemp2 % mat (i,j) /= gridTemp2 % nodata ) THEN rasterET % mat (i,j) = rasterET % mat (i,j) + & gridTemp2 % mat (i,j) * dt * 1000. ELSE rasterET % mat (i,j) = rasterET % nodata END IF END DO END DO ELSE DO j = 1, rasterTemplate % jdim DO i = 1, rasterTemplate % idim IF ( rasterTemplate % mat (i,j) /= rasterTemplate % nodata) THEN rasterET % mat (i,j) = rasterET % mat (i,j) + & et % mat (i,j) * dt * 1000. END IF END DO END DO END IF END IF !update potential evapotranspiration IF ( varOut (13) ) THEN IF ( useTemplate ) THEN !need to convert maps CALL GridConvert (pet, gridTemp) CALL GridResample (gridTemp, gridTemp2) DO j = 1, rasterTemplate % jdim DO i = 1, rasterTemplate % idim IF ( rasterTemplate % mat (i,j) /= rasterTemplate % nodata .AND. & gridTemp2 % mat (i,j) /= gridTemp2 % nodata ) THEN rasterPET % mat (i,j) = rasterPET % mat (i,j) + & gridTemp2 % mat (i,j) * dt * 1000. ELSE rasterPET % mat (i,j) = rasterPET % nodata END IF END DO END DO ELSE DO j = 1, rasterTemplate % jdim DO i = 1, rasterTemplate % idim IF ( rasterTemplate % mat (i,j) /= rasterTemplate % nodata) THEN rasterPET % mat (i,j) = rasterPET % mat (i,j) + & pet % mat (i,j) * dt * 1000. END IF END DO END DO END IF END IF countSteps = countSteps + 1 IF (CronIsTime (time, cron) ) THEN !set path timeString = time !convert to string 'YYYY-MM-DDThh:mm:ssTZD' string16 = timeString (1:16) string16 (14:14) = '-' !precipitation IF (varOut (1) ) THEN string = TRIM (pathout) // TRIM (string16) // '_precipitation.asc' CALL ExportGrid (rasterPrecipitation, string, ESRI_ASCII) !reset raster rasterPrecipitation = 0. END IF !air temperature IF (varOut (2) ) THEN string = TRIM (pathout) // TRIM (string16) // '_temperature.asc' CALL ExportGrid (rasterTemperature, string, ESRI_ASCII) !reset raster rasterTemperature = 0. END IF !air relative humidity IF (varOut (3) ) THEN string = TRIM (pathout) // TRIM (string16) // '_rh.asc' CALL ExportGrid (rasterRH, string, ESRI_ASCII) !reset raster rasterRH = 0. END IF !radiation IF (varOut (4) ) THEN string = TRIM (pathout) // TRIM (string16) // '_rad.asc' CALL ExportGrid (rasterRad, string, ESRI_ASCII) !reset raster rasterRad = 0. END IF !net radiation IF (varOut (5) ) THEN string = TRIM (pathout) // TRIM (string16) // '_netrad.asc' CALL ExportGrid (rasterNetRad, string, ESRI_ASCII) !reset raster rasterNetRad = 0. END IF !wind speed IF (varOut (6) ) THEN string = TRIM (pathout) // TRIM (string16) // '_windspeed.asc' CALL ExportGrid (rasterWS, string, ESRI_ASCII) !reset raster rasterWS = 0. END IF !snow water equivalent IF (varOut (7) ) THEN string = TRIM (pathout) // TRIM (string16) // '_swe.asc' CALL ExportGrid (rasterSWE, string, ESRI_ASCII) !reset raster rasterSWE = 0. END IF !soil moisture IF (varOut (8) ) THEN string = TRIM (pathout) // TRIM (string16) // '_soil-moisture.asc' CALL ExportGrid (rasterSM, string, ESRI_ASCII) !reset raster rasterSM = 0. END IF !runoff IF (varOut (9) ) THEN string = TRIM (pathout) // TRIM (string16) // '_runoff.asc' CALL ExportGrid (rasterRunoff, string, ESRI_ASCII) !reset raster rasterRunoff = 0. END IF !infiltration IF (varOut (10) ) THEN string = TRIM (pathout) // TRIM (string16) // '_infiltration.asc' CALL ExportGrid (rasterInfiltration, string, ESRI_ASCII) !reset raster rasterInfiltration = 0. END IF !percolation IF (varOut (11) ) THEN string = TRIM (pathout) // TRIM (string16) // '_percolation.asc' CALL ExportGrid (rasterPercolation, string, ESRI_ASCII) !reset raster rasterPercolation = 0. END IF !actual evapotranspiration IF (varOut (12) ) THEN string = TRIM (pathout) // TRIM (string16) // '_et.asc' CALL ExportGrid (rasterET, string, ESRI_ASCII) !reset raster rasterET = 0. END IF !potential evapotranspiration IF (varOut (13) ) THEN string = TRIM (pathout) // TRIM (string16) // '_pet.asc' CALL ExportGrid (rasterPET, string, ESRI_ASCII) !reset raster rasterPET = 0. END IF !reset counter countSteps = 0 END IF RETURN END SUBROUTINE ExportMaps